Java 20 的到来

2023 年 3 月 21 日 | 10分钟读完
萨拉特·钱德
Java SE 产品管理总监

­在 Twitter 上关注JavaOpenJDK

Oracle 很自豪地宣布 JDK 20 全面上市。此版本是按照六个月的发布节奏按时交付的第 11 个功能版本由于预期改进源源不断,这种程度的可预测性使开发人员能够轻松管理创新的采用。

 

自动生成图表描述

 

Java 提高性能、稳定性和安全性的能力使其继续成为世界上最流行的编程语言。

 

JDK 20 现已推出!

Oracle 现在为开发人员、最终用户和企业提供 JDK 20 。

Oracle JDK 20 不是长期支持 (LTS) 版本,因此它只会收到更新,直到六个月后被 JDK 21 取代。

Oracle JDK 17(于 2021 年 9 月 14 日发布)是 Java 的最新 LTS 版本。Oracle 宣布计划缩短 LTS 版本之间的时间,从三年缩短到两年,因此 JDK 21(2023 年 9 月)计划成为下一个LTS。

 

Java 20 一起

正如我们在之前的版本中所做的那样,在 Java 20 中,我们庆祝 OpenJDK 社区中许多个人和组织的贡献 - 我们一起构建 Java!

JDK 20 修复率

JDK 版本随时间的变化率多年来基本保持不变,但在六个月的节奏下,生产就绪的功能和改进的交付速度急剧加快。

我们不像过去的主要版本那样每隔几年进行数以万计的修复并提供近百个 JEP(JDK 增强提案),而是按照更易于管理、可预测的六个月计划在更精简的功能版本中提供增强功能。这些变化范围从重要的新功能到日常维护、错误修复和文档改进的小增强。每个更改都在JDK Bug 系统中的单个问题的单个提交中表示。

在 GA 时,Java 11 到 Java 20 中标记为已修复的21,604 个JIRA 问题中,有 15,420 个是由 Oracle 工作人员完成的,而 6,184 个是由个人开发人员和为其他组织工作的开发人员贡献的。仔细研究这些问题并整理受让人的组织数据,可以得出以下赞助 Java 贡献开发的组织图表:

 

图表、树状图 描述已自动生成

 

在 Java 20 中,在标记为已修复的 2,314 个 JIRA 问题中,有 1,595 个 由 Oracle 完成,而 719 个由 Java 社区的其他成员贡献。

Oracle 衷心感谢阿里巴巴、亚马逊、ARM、谷歌、华为、IBM、英特尔、ISCAS、红帽、SAP 和腾讯等组织的开发人员做出的显着贡献。我们也很高兴看到 Bellsoft 和 Loongson 等小型组织以及独立开发人员的贡献,他们总共贡献了 Java 20 中 7% 的修复。

我们同样感谢许多经验丰富的开发人员审查了提议的更改,尝试了早期访问版本并报告问题的早期采用者,以及在 OpenJDK 邮件列表上提供反馈的专业人士。 

以下人员提供了有关构建质量的宝贵反馈、记录了良好的质量错误或提供了频繁的更新:

  • 里克·希勒加斯(阿帕奇德比)
  • 乌韦·辛德勒 (Apache Lucene)
  • Jaikiran Pai(阿帕奇蚂蚁)
  • 拉斐尔·温特哈特 (Byte Buddy)
  • Yoann Rodière(Hibernate 项目)
  • 马克·霍夫曼(JaCoCo)
  • 卢卡斯·埃德 (JOOQ)
  • 弗拉基米尔·西特尼科夫 (AssertJ)

此外,通过OpenJDK 质量外展计划,我们要感谢以下 FOSS 项目和个人,他们在测试 Java 20 早期访问版本方面提供了出色的反馈,以帮助提高发行版的质量:

  • Apache Tomcat 和 Apache Wicket(马丁·格里戈罗夫)
  • Apache 动物园管理员(恩里科·奥利维利)
  • MyBatis(岩尾大道)
  • RxJava(大卫·卡诺克)
  • 勺子(马丁·维特林格)

特别值得一提的是,我们要感谢 Rick Hillegas 和 Apache Derby 团队,多年来他们在每个 JDK 版本的早期访问测试周期中提供了可靠且定期的反馈。

 

Java 20 中的新功能

除了数以千计的性能、稳定性和安全更新之外,Java 20 还提供了数十个新功能和增强功能,其中七个增强功能的重要性足以保证其自己的JDK 增强提案 - JEP ,涵盖四个预览功能和三个孵化器功能。

一些不需要 JEP 的最重要的变更是:

  • (D)TLS 密钥交换命名组
  • 在G1中添加GarbageCollectorMXBean用于备注和清理暂停时间
  • 在 x86_64 和 aarch64 平台上提供 ChaCha20 内在函数
  • 支持统一码15.0
  • 改进 G1 并发细化线程的控制
  • 支持 CLDR 版本 42
  • 新 JFR 事件:jdk.InitialSecurityProperty
  • 新 JFR 事件:jdk.SecurityProviderService
  • 改进的预览 API 页面
  • 新的“jmod --compress”命令行选项
  • BreakIterator 中的字素支持
  • 将时区数据更新为 2022c
  • JavaDoc 标题中自动生成的 ID

这些以及许多其他新功能的完整详细信息可以在https://jdk.java.net/20/release-notes中找到。

JEP 预览功能是 Java SE 平台的完全指定和完全实现的语言或 VM 功能;但又是无常的。它们在 JDK 功能版本中提供,以便开发人员根据实际使用情况提供反馈,然后再在未来版本中永久保留。这也为工具供应商提供了在最终确定为 Java SE 标准之前致力于支持功能的机会。

JEP 孵化器模块允许将非最终 API 和非最终工具交给开发人员和用户,以收集反馈,最终提高 Java 平台的质量。

随 Java 20 提供的 7 个 JEP 分为三个类别,分别对应关键的长期 Java 技术项目和硬件支持。

 

琥珀计划

JEP 432 – 记录模式(第二预览)

通过扩展模式匹配来表达更复杂、可组合的数据查询,从而提高开发人员的工作效率。这是通过使用记录模式来解构记录值来增强 Java 编程语言来完成的。记录模式和类型模式可以嵌套,以实现强大的、声明性的、可组合形式的数据导航和处理。

JEP 432 涉及:

  • [JDK 19] JEP 405记录模式(预览)
  • [JDK 20] JEP 433 :switch 的模式匹配(第 4预览版)

 

JEP 433 – 开关的模式匹配(第四预览)

通过表达式和语句的模式匹配来增强 Java 编程语言,从而提高开发人员的工作效率。switch此改进允许针对多种模式测试表达式,每种模式都有特定的操作,以便可以简洁、安全地表达复杂的面向数据的查询。

JEP 433 涉及:

  • [JDK 19] JEP 427开关的模式匹配(第三次预览
  • [JDK 20] JEP 432记录模式(第二预览)

 

巴拿马计划

JEP 434 - 外部函数和内存 API(第二预览)

外部函数和内存 API 通过四种独特的方式提供价值:

易于使用—用卓越的纯 Java 开发模型替换 Java 本机接口(JNI)

性能— 提供与 JNI 和sun.misc.Unsafe.

通用性- 提供在不同类型的外部内存(例如,本机内存、持久内存和托管堆内存)上进行操作的方法,并且随着时间的推移,可以适应其他平台(例如,32 位 x86)和用其他语言编写的外部函数优于 C(例如 C++、Fortran)。

安全- 允许程序对外部内存执行不安全的操作,但默认情况下会警告用户此类操作。

外部函数和内存 API 引入了一个 API,Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即 JVM 外部的代码),并通过安全地访问外部内存(即不由 JVM 管理的内存),API 使 Java 程序能够调用本机库并处理本机数据,而不会造成脆弱性和危险。 JNI。

JEP 434 涉及:

  • [JDK 19] JEP 424:外部函数和内存 API(第二个孵化器)

JEP 438 - 矢量 API(第五个孵化器)

提高性能,实现优于等效标量计算的性能。这是通过引入 API 来表达向量计算来完成的,该 API 在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。 Vector API 是在 JDK 16 到 19 中孵化的。JDK 20 纳入了这些版本用户的反馈以及性能改进和实现增强。

JEP 426 涉及:

  • [JDK 19] JEP 426Vector API(第四个孵化器)

 

织机计划

Loom 项目旨在大幅减少编写、维护和观察高吞吐量并发应用程序的工作量,从而充分利用可用硬件。 Loom 项目的工作于 2017 年底开始,自 JDK 19 以来已经产生了 6 个 JEP。

JEP 436 - 虚拟线程(第二预览)

虚拟线程是轻量级线程,可以显着减少编写、维护和观察高吞吐量并发应用程序的工作量。

Virtual Threads 是作为 Loom 项目一部分的第一个 JEP。 Project Loom 升级了 Java 并发模型,以满足当今大规模服务器应用程序的需求。

Java 的线程有很多优点。它们提供了一种自然的编程模型,具有可读的、使用用户理解的控制流运算符的顺序代码——循环、条件、异常。用户可以获得出色的调试和可服务性以及可读的堆栈跟踪。线程是操作系统调度的自然单位。我们希望保留这些优势。 

问题在于操作系统对线程的实现过于重量级。为每个连接启动一个线程需要很长时间,但更糟糕的是,操作系统在任何时候可以支持的线程数量限制了服务器可以处理的并发事务数量——远低于硬件或网络的容量——因此线程成为服务器吞吐量的严重限制因素。

许多人认为我们会接受所谓的“反应式”框架提供的异步编程风格。通过不直接将并发操作表示为线程,它确实超出了每个请求线程模型所带来的限制,但代价高昂——代码更加复杂,更难编写、更难阅读、更难调试或配置文件,因为平台的所有层及其工具都是围绕线程构建的。响应式可能是人们可以用当前 JVM 做的最好的事情,但我们的目标是做得更好,我们可以通过使线程更轻、更具可扩展性来做到这一点,让开发人员继续使用他们多年来一直成功使用的模型和工具。

如今,开发人员面临三个糟糕的选择:由于利用率不足而浪费硬件,通过较差的编程模型和可观察性来浪费程序员的精力,或者放弃 Java。因此,Project Loom 为开发人员提供了更好的选择。

JEP 429 – 范围值(孵化器)

作用域值允许在线程内和线程间共享不可变数据。它们优于线程局部变量,特别是在使用大量虚拟线程时,并以多种方式提供价值,包括:

  • 易用性:提供了一种在线程内和子线程之间共享数据的编程模型,从而简化数据流的推理。
  • 可理解性:使共享数据的生命周期从代码的语法结构中可见。
  • 鲁棒性:确保调用者共享的数据只能由合法的被调用者检索。
  • 性能:将共享数据视为不可变,以便允许大量线程共享,并实现运行时优化。

 

JEP 437 - 结构化并发(第二个孵化器)

结构化并发通过引入结构化并发 API 来简化多线程编程。这是通过引入结构化并发 API 来简化多线程编程来完成的。结构化并发将在不同线程中运行的多个任务视为单个工作单元,从而简化错误处理和取消、提高可靠性并增强可观察性。

JEP 437 涉及:

  • [JDK 19] JEP 428结构化并发(孵化器)

 

资源

Java 仍然是当今技术趋势的第一大编程语言。 Java 20 的按时交付改进表明,通过持续深思熟虑的规划和生态系统参与,Java 平台已为云中的现代开发和增长做好了准备。

通过以下方式继续了解最新新闻和更新:

  • 访问 Dev.java(Oracle 的专用门户,旨在提高您的 Java 知识和社区参与度)。
  • 访问 Inside.java (Oracle Java 团队的新闻和观点)。
  • 收听Inside.java 播客(由 Oracle 的 Java 开发人员直接为您提供的面向 Java 开发人员的音频节目。对话将讨论该语言、JVM、OpenJDK、平台安全性、Loom 和 Panan 等创新项目以及一切之间)。
  • 观看 Inside.java 新闻广播(将 Inside.java 播客扩展为视频格式的视频节目)。
  • 在 YouTube 上观看Java (Oracle 的相关 Java 视频集合,可帮助您提高 Java 专业知识)。
  • 观看JEP Café (Oracle 对流行的 JDK 增强提案的技术探索)。
  • 观看Sip of Java(Oracle 的 1 分钟简短视频,介绍了鲜为人知的 Java 增强功能,这些增强功能可提供性能、稳定性和安全性改进)。
  • 加入OpenJDK 邮件列表(了解您最喜欢的 OpenJDK 项目进展的地方)。
  • 在 Twitter 上关注OpenJDKJava(社交媒体提供有关 Java 不断发展的更新和新闻)。
  • 阅读 Java 杂志Oracle 的数字 Java 出版物,为开发人员提供由开发人员撰写的技术文章。

萨拉特·钱德

Java SE 产品管理总监

Sharat Chander 在 IT 行业工作了 20 年,曾就职于 Bell Atlantic、Verizon、Sun Microsystems 和 Oracle 等公司。他的背景和技术专长是 Java 开发工具、图形设计和产品/社区管理。 Chander 15 年来一直积极参与 Java 社区,帮助提高 Java 意识、接受度、采用和宣传。在 Oracle,作为 Java 开发人员关系总监,Chander 担任 JavaOne 会议内容主席,他担任该职位已有 7 年,负责推动会议中的技术内容策略和 Java 社区参与。他经常担任全球开发者计划的主题演讲者和参与者。 Chander 拥有马里兰大学企业金融学士学位和马里兰州洛约拉学院国际商务 MBA 学位。您可以在多个全球开发者活动和 Java 社区活动中找到 Chander。当爪哇的知名度不高时,他会追随他对棒球的其他热情,并狂热地追随他的家乡巴尔的摩金莺队。

推特账号:@Sharat_Chander

显示较少

上一篇文章

宣布 Java Card 3.2 发布

尼古拉斯·庞西尼| 1分钟阅读

下一篇文章


开发用于补偿交易的 Saga 参与者代码

保罗·帕金森|阅读时间17分钟